查看原文
其他

基于SYN7318智能家居语音识别系统的设计

小师弟 果果小师弟 2022-05-20

点击上方“果果小师弟”,选择“置顶/星标公众号”

干货福利,第一时间送达!

摘要:随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放,尤其是最近几年,人工智能AI技术以及智能家居得到了飞速的发展。本项目将近年来发展迅速的嵌入式技术和非特定语音识别芯片SYN7318有机的结合,设计开发了一能够通过语音来控制家用电器的开启和关闭、拨打电话、发送短信以及网络天气播报的智能家居语音识别系统。哈哈,掉一下书袋这个东西是18年做的一个小玩意,当时是初学32又快期末考试了做的并不完善,放到B站上有很多人要资料,所以今天抽空就把这个作品的原理和过程来写一写。这个东西虽然科技含量不高,但是非常具有可玩性,看完你也可以做一个。

所需材料:STM32F103C8T6+SYN7318语音识别芯片+SIM800C模块。

1 系统整体架构

       系统主要由语音模块 SYN7318、蓝牙模块 HC-05、 GSM 传感器 SIM800C 模块组成,利用串口通讯与非特定语言识别芯片 SYN7318 以及 GSM 传感器模块进行指令传输。系统上电后首先通过唤醒指令“小艾同学”激活该模块。接着进入语音识别状态,然后通过“主人”发送的相关指令从而执行一系列的动作。模块在接受到指令之后首先与模块本身事先预定好的词汇进行对比 ,相一致则通过串口通讯的方式向单片机发送指令,然后单片机在接受到指令后随即发生相应的操作向单片机外设发送特定的指令(开关电器、拨打电话、发送短信、天气播报等),从而实现智能语音识别,智能家居控制。整体框架设计如下图所示。

2 系统硬件设计

2.1 SYN7318 语音模块

      该系统的核心内容语音模块采用的是宇音天下公司最新的语音控制芯片。SYN7318 中文语音交互模块集成了语音识别、语音合成和语音唤醒功能 ,SYN7318 通过 UART 接口通讯方式接收命令帧。如控制命令帧、待合成的文本数据,实现文本到语音、语音到文本的转换以及语音唤醒功能。在语音识别方面,SYN7318 可以支持 10000 条词条的语音识别,可实现语义理解,大大满足了人机交互领域对交互内容丰富程度的强烈需求。另外 SYN7318 还可以支持识别词条的分类反馈能力。可以灵活的对语义相似词条根据用户指定的语义类别进行词条 ID 和命令 ID 的对应。同时模块内部还集成了 MP3 音频文件的播放功能。

2.2 智能家居控制模块

       智能家居的控制部分主要采用的是蓝牙模块,通过系统的蓝牙模块和终端的蓝牙模块实现主从双向控制,就可以通过单片机来无线控制智能家居。如实现开关灯、开关空调、开关电视等一系列的操作,另外还可以通过继电器来有线控制,通讯方式同样采用串口通讯的方式。

2.3 SM 传感器 SIM800C 模块

      本系统采用GSM传感器SIM900模块控制来拨打电话、发送短信,用户不仅可以通过语音指令来拨打电话、发送短信。还可以在异地通过发送短信的方式来控制家用电器。从而实现正真意义上的远程智能家居控制,具有很强的可操作性。此模块与单片机的通讯方式同样是串口通讯,通过 AT 指令集来发送相应的命令,大大减轻了程序设计的难度。

3 软件设计

3.1语音模块相关配置

       为了确保各个模块之间数据传输的准确性,设置语音模块与单片机之间串口通讯的波特率为 9600bps。模块内的词汇和预设的命令词都是由上位机下载到模块内部,上位机发送给 SYN7318 模块的所有命令和数据都需要用“帧” 的方式进行封装后传输。上位机发送启动语音识别或语音唤醒功能的命令给语音模块,模块把从麦克风采集到的语音数据,通过内部的识别模块进行转换成相应的识别结果,通过通讯接口回传给控制器模块。

3.2 蓝牙、继电器的配置

         继电器模块采用的是市面上通用的带光耦隔离的继电器,通讯方式为串口通讯(TTL 电平),IO 口高电平为 3.3V,供电电压为 5V, 用户可以根据个人需要自定义控制模式,即几点起的开关与闭合。蓝牙模块采用广州汇承的 HC-05,模块通讯简单,在系统上电之前可单独的对模块进行配置,模块与单片机连接最少只需要 4 根线即可:VCC、GND、 TXD、RXD,VCC 和 GND 用于给模块供电,模块 TXD 和 RXD 则连接单片机的 RXD 和 TXD 即可。

3.3 GSM传感器SIM800C配置

       四频 GSM/GPRS 模块 SIM800C 通过 AT 指令可进行拨号 / 接听 / 短信 /GPRS 通讯,供电电压为直流 5V, 模块自带咪口和扬声器接口,但本系统只需将电源正负极和 TX、RX与单片机接入即可。SYN7318 模块接收语音信息通过比对向单片机发送指令,然后单片机通过 SWITCH 语句进行判断向 SIM800C 发送拨号与短信的 AT 指令,就可以实现语音拨打电话和发送短信的功能,GSM工作状态如下图所示。


void Pwr_Init(void)
{        
    GPIO_InitTypeDef GPIO_InitStructure;//定义端口变量
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);  //使端口GPIOA时钟生效,使用外设时钟2
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 ; //设置GPIO子端口号    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置端口输出频率为50MHz
    GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化端口
    GPIO_ResetBits(GPIOB, GPIO_Pin_14);
}

void Gsm_init(void)
{
    Pwr=1;  // Pwr=1;GSM启动
    delay_ms(1000); //这里必须要进行延时
    Pwr=0;
}
void Gsm_call_liuyao(void) //打电话给主人
{        

    Usart2_Send("ATE1\r\n");
    delay_ms(1000); //这里必须要进行延时
    Usart2_Send("AT+COLP=1\r\n");
    delay_ms(1000); //这里必须要进行延时
    Usart2_Send("ATD18815892456;\r\n");
    delay_ms(2000); //这里必须要进行延时
}
void Gsm_Send_messige(void)  //GSM模块发送短信
{        
    Usart2_Send("AT+CMGF=1\r\n");//设置开启文本模式功能
    delay_ms(100);
    Usart2_Send("AT+CSMP=17,167,2,25\r\n");//设置文本模式参数
    delay_ms(100);
    Usart2_Send("AT+CSCS=\"UCS2\"\r\n");//设置为 UCS2 编码字符集
    delay_ms(100);
    Usart2_Send("AT+CMGS=\"00310038003800320037003500330038003600350031\"\r\n");//打开Unicode选项卡,把需要发送的电话号码转换为 Unicode 码,如 10086
    delay_ms(100);
    Usart2_Send("6211662F667A80FD5BB65C458BED97F352A9624BFF0C621153EF4EE5517395ED62535F00624067095BB6752875355668FF0C53EF4EE5611F77E55BA451856E296E7F5EA6FF0C8FDB884C59296C1498846D4BFF0C62118FD853EF4EE5625375358BDDFF0C53D177ED4FE1FF0C8FDB884C516874035B9A4F4DFF0C621173B057287ED94F6053D14E864E00676177ED4FE13002\r\n");
     //发送的短信内容为:我是智能家居语音助手,我可以关闭打开所有家用电器,
     //可以感知室内温湿度,进行天气预测,我还可以打电话,发短信,进行全球定位,我现在给你发了一条短信。
    delay_ms(100);
    USART_SendData(USART2, 0x1A);
    delay_ms(2000);
}
void Gsm_answer_phone(void)  //GSM模块接听电话
{        
    Usart2_Send("AT+CLIP=1\r\n");//设置开启来电显示功能
    delay_ms(100);
    //等待电话打入
    //如果要接听就发送ATA
    //Usart2_Send("ATA\r\n");
    //这里我们直接挂电话
    delay_ms(5000);
    Usart2_Send("ATH\r\n");
}
void Gsm_off(void)//关闭GSM模块
{
    Usart2_Send("ATH\r\n");
    Pwr=1;           //   Pwr=1;GSM启动
    delay_ms(1000); //这里必须要进行延时
    Pwr=0;
}

4 系统实物





注:为当时是一遍焊接一边加东西的,所以没有电路图


后台回复:智能家居,即可获取该设计的程序以及开发文档资料。

END

往期精彩回顾





微电网模拟系统—2017年电赛A题
2020年全国大学生电子设计竞赛来了!
CPU就是一个坏女人
如何做一名合格的研究生?
最专业的嵌入式开发调试工具
基于STM32的MLX90614人体红外测温枪
B站粉丝显示器


原创不易,如果觉得文章对你有帮助,分享、点赞、在看,您的支持是我们不断创作的激励!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存